package com.company.ljh.medium;
/**
 * 189.给你一个数组，将数组中的元素向右轮转 k 个位置，其中 k 是非负数。
 *
 */

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2022/5/29 20:43
 * @version:1.0
 */
public class 旋转数组 {
    public void rotate(int[] nums, int k) {
        /**反转法，先将整个数组反转，然后分别反转前k个和后n-k个
         7 6 5 4 3 2 1
         5 6 7 1 2 3 4
         */
        k = k  % nums.length;
        if(k == 0){
            return;
        }
        reverse(nums,0,nums.length-1);
        reverse(nums,0,k -1);
        reverse(nums,k,nums.length - 1);

    }
    private void reverse(int[] nums, int start,int end){
        while(start < end){
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            end--;
            start++;
        }
    }
}
